home *** CD-ROM | disk | FTP | other *** search
/ MacWorld 1999 January - Disc 2 / Macworld (1999-01) (Disk 2).dmg / Serious Demos / Symbolic Composer 4.2 / Environment / System / SOLAR / Vector Generators / Arrays / build-array next >
Lisp/Scheme  |  1998-10-23  |  2KB  |  47 lines

  1. build-array list-of-rowlists
  2.  
  3. build-array in combination with pick-array  enables  to automate building hexachords from a 2-dimensional prime-inversion array used in 12 tone composing.
  4.  
  5. In the following an array of 12x12 is defined. Each row MUST have the equal number of columns, and there should he as many rows and colums, but otherwise you can use as many elements as you want.
  6.  
  7. (setq array 
  8.       (build-array
  9. ; column  0   1  2  3   4  5   6  7  8  9 10 11
  10.        '((10  5  0  11  9  6   1  3  7  8  2  4)      ; row 0
  11.          (3  10  5  4   2  11  6  8  0  1  7  9)      ; 1
  12.          (8  3  10  9   7  4  11  1  5  6  0  2)      ; 2
  13.          (9  4  11  10  8  5   0  2  6  7  1  3)      ; 3
  14.          (11 6   1  0   10  7  2  4  8  9  3  5)      ; 4
  15.          (2  9   4  3   1  10  5  7  11  0  6  8)     ; 5
  16.          (7  2   9  8   6  3  10  0  4  5  11  1)     ; 6
  17.          (5  0   7  6   4  1  8  10  2  3   9 11)     ; 7
  18.          (1  8   3  2   0  9  4   6  10 11  5  7)     ; 8
  19.          (0  7   2  1  11  8  3   5  9   0  4  6)     ; 9
  20.          (6  1   8  7   5  2  9  11  3   4  10  0)    ; 10
  21.          (4  11  6  5   3  0  7  9   1   2  8  10)))) ; 11
  22.  
  23. To pick up hexacord use pick-array.
  24.  
  25. (pick-array 11 7 6 array :right)
  26. --> (9 1 2 8 10 4)
  27.  
  28. Hint: When building arrays suitable in 12 tone composition you may find the following example useful. 
  29.  
  30. (make vec-set (list-to-vector '(0 1 2 3 4 5 6 7 8 9 10 11)))
  31. (make setprime (vector-to-symbol a l vec-set))
  32.  
  33. (defun lrotate (n pat)
  34.   (prog (out)
  35.     (dotimes (i n) 
  36.       (setq out (append out 
  37.              (list (symbol-scroll i pat)))))
  38.     (return out))) 
  39.  
  40. (setq symbol-array (build-array (lrotate 12 setprime)))
  41. (pick-array 11 3 6 symbol-array :left)
  42. --> (e d c b a l)
  43.  
  44. Besides such arrays have use in 12 tone music they represent an efficient way to permutate symbols, rhythms and velocities in tonal music.
  45.  
  46. See magic-squares.
  47.